package fuse.LaCollaFS.Metadades;


import fuse.FuseStat;

public class Node {
	private Directori Pare;

	private String Nom;

	private FuseStat Estat;

	private int Lectura;

	private int Escriptura;

	private int tipo;

	/**
	 * Constructor de la clase
	 * 
	 */
	public Node() {
		// Calendar c1 = Calendar.getInstance();
		//System.currentTimeMillis();
		Pare = null;
		Nom = "";
		Estat = new FuseStat();
	}

	/**
	 * Imprimeix per pantalla
	 * 
	 * @param o
	 */
	private void p(Object o) {
		System.out.println(o); // TODO Auto-generated method stub

	}

	/**
	 * Retorna el nom del node
	 * 
	 * @return nom del node
	 */
	public String getNom() {
		String n;
		n = Nom;
		/*
		 * if (this.esFitxer()) { Fitxer f; f = (Fitxer) this; n = n + "@" +
		 * f.getVersion(); }
		 */

		return n;

	}

	/**
	 * Retorna el nom del pare
	 * 
	 * @return nom del pare
	 */
	public Directori getPare() {

		return Pare;
	}

	/**
	 * retorna el stat del node
	 * 
	 * @return stat del node
	 */
	public FuseStat getStat() {

		return Estat;
	}

	/**
	 * modifica el nom
	 * 
	 * @param i
	 *            nou nom del mode
	 */
	public void setNom(String i) {
		Nom = i;

		Estat.mtime = (int) (System.currentTimeMillis() / 1000L);

	}

	/**
	 * modifica el nom pare
	 * 
	 * @param i
	 *            nou nom del pare
	 */
	public void setPare(Directori i) {
		Pare = i;
	Estat.mtime = (int) (System.currentTimeMillis() / 1000L);

	}

	/**
	 * Modifica el estat
	 * 
	 * @param i
	 *            nou fusestat
	 */
	public void setStat(FuseStat i) {

		Estat = i;
		Estat.mtime = (int) (System.currentTimeMillis() / 1000L);
	}

	/**
	 * Obté el path del node
	 * 
	 * @return
	 */
	public String ObtenirPath() { 
		if (this.getPare() == null) {
			return this.getNom();
		} else {
			return this.getPare().ObtenirPath() + "/" + this.getNom();
		}
	}

	/**
	 * Obté el path del pare
	 * 
	 * @return
	 */


	/**
	 * Defineix el Node com a directori
	 * 
	 */
	public void defDir() {
		tipo = 0;
	}

	/**
	 * Defineix el node com a fitxer
	 * 
	 */
	public void defFitxer() {
		tipo = 1;
	}

	/**
	 * Defineix el node com a fitxer
	 * 
	 */
	public void defEnllas() {
		tipo = 2;
	}
	
	
	/**
	 * Consulta sobre si es un directori
	 * 
	 * @return true si es dir, false si no
	 */
	public boolean esDirectori() {

		return (tipo==0);
	}

	/**
	 * Consulta sobre si es un Fitxer
	 * 
	 * @return true si fitxer, false si no
	 */
	public boolean esFitxer() {

		return (tipo==1);
	}
	
	/**
	 * Consulta sobre si es un Fitxer
	 * 
	 * @return true si fitxer, false si no
	 */
	public boolean esEnllas() {

		return (tipo==2);
	}

	/**
	 * Allibera memoria eliminant el objecte. ( cal?)
	 * 
	 */
	public void delete() {
		// eliminar objecte de Lacolla
	}
	

}
